home *** CD-ROM | disk | FTP | other *** search
- /*
- AddressXlation.h
- MacTCP name to address translation routines.
-
- Copyright Apple Computer, Inc. 1988-91
- All rights reserved
-
- Modifications by Dave Nebinger (dnebing@andy.bgsu.edu), 01/30/94.
- 12/04/95 dn - Merged in the stuff from DNR.h from the old library.
- */
-
- #pragma once
-
- #ifndef __H_AddressXlation__
- #define __H_AddressXlation__
-
- #include <MacTCP.h>
-
- #define NUM_ALT_ADDRS 4
-
- enum AddrClasses {
- A = 1,
- NS,
- CNAME = 5,
- HINFO = 13,
- MX = 15,
- lastClass = 32767
- };
-
- typedef enum AddrClasses AddrClasses;
-
- // procedure code numbers for DNR code segment
-
- #define OPENRESOLVER 1
- #define CLOSERESOLVER 2
- #define STRTOADDR 3
- #define ADDRTOSTR 4
- #define ENUMCACHE 5
- #define ADDRTONAME 6
- #define HINFO 7
- #define MXINFO 8
-
- #define kMaxResolverCalls 8 // maximum allowable active resolver queries
-
- #define kHostFileCreatorType 'SPM ' // if the host file doesn't exist, one will be created with this creator type...
-
- typedef struct HostInfo HostInfo,* HostInfoPtr,** HostInfoHdl;
- typedef struct HInfoRec HInfoRec,* HInfoPtr,** HInfoHdl;
- typedef struct MXRec MXRec,* MXPtr,** MXHdl;
- typedef struct ReturnRec ReturnRec,* ReturnPtr,** ReturnHdl;
- typedef struct CacheEntryRec CacheEntryRec,* CacheEntryPtr,** CacheEntryHdl;
-
- // macros for allocating new blocks...
- #define NewHostInfoPtr() NEWPTR(HostInfoPtr,sizeof(HostInfo))
- #define DisposeHostInfoPtr(a) DISPOSEPTR(a)
- #define NewHostInfoHdl() NEWHDL(HostInfoHdl,sizeof(HostInfo))
- #define DisposeHostInfoHdl(a) DISPOSEHDL(a)
-
- #define NewHInfoPtr() NEWPTR(HInfoPtr,sizeof(HInfoRec))
- #define DisposeHInfoPtr(a) DISPOSEPTR(a)
- #define NewHInfoHdl() NEWHDL(HInfoHdl,sizeof(HInfoRec))
- #define DisposeHInfoHdl(a) DISPOSEHDL(a)
-
- #define NewMXPtr() NEWPTR(MXPtr,sizeof(MXRec))
- #define DisposeMXPtr(a) DISPOSEPTR(a)
- #define NewMXHdl() NEWHDL(MXHdl,sizeof(MXRec))
- #define DisposeMXHdl(a) DISPOSEHDL(a)
-
- #define NewReturnPtr() NEWPTR(ReturnPtr,sizeof(ReturnRec))
- #define DisposeReturnPtr(a) DISPOSEPTR(a)
- #define NewReturnHdl() NEWHDL(ReturnHdl,sizeof(ReturnRec))
- #define DisposeReturnHdl(a) DISPOSEHDL(a)
-
- #define NewCacheEntryPtr() NEWPTR(CacheEntryPtr,sizeof(CacheEntryRec))
- #define DisposeCacheEntryPtr(a) DISPOSEPTR(a)
- #define NewCacheEntryHdl() NEWHDL(CacheEntryHdl,sizeof(CacheEntryRec))
- #define DisposeCacheEntryHdl(a) DISPOSEHDL(a)
-
- typedef pascal void (*EnumProcPtr)(CacheEntryPtr cacheEntryRecordPtr, char* userDataPtr);
- typedef pascal void (*HostInfoProcPtr)(HostInfoPtr hostInfoPtr, char* userDataPtr);
- typedef pascal void (*ReturnRecProcPtr)(ReturnPtr returnRecPtr, char* userDataPtr);
-
- enum {
- uppEnumProcInfo=kPascalStackBased
- | STACK_ROUTINE_PARAMETER(1,SIZE_CODE(sizeof(CacheEntryPtr)))
- | STACK_ROUTINE_PARAMETER(2,SIZE_CODE(sizeof(char*))),
- uppHostInfoProcInfo=kPascalStackBased
- | STACK_ROUTINE_PARAMETER(1,SIZE_CODE(sizeof(HostInfoPtr)))
- | STACK_ROUTINE_PARAMETER(2,SIZE_CODE(sizeof(char*))),
- uppReturnRecProcInfo=kPascalStackBased
- | STACK_ROUTINE_PARAMETER(1,SIZE_CODE(sizeof(ReturnPtr)))
- | STACK_ROUTINE_PARAMETER(2,SIZE_CODE(sizeof(char*)))
- };
-
- #if USESROUTINEDESCRIPTORS
- typedef UniversalProcPtr EnumUPP;
- typedef UniversalProcPtr HostInfoUPP;
- typedef UniversalProcPtr ReturnRecUPP;
-
- #define CallEnumProc(routine,cep,data)\
- CallUniversalProc((UniversalProcPtr)routine,uppEnumProcInfo,(cep),(data))
- #define NewEnumProc(routine)\
- (EnumUPP)NewRoutineDescriptor((ProcPtr)(routine),uppEnumProcInfo,GetCurrentISA())
- #define CallHostInfoProc(routine,cep,data)\
- CallUniversalProc((UniversalProcPtr)routine,uppHostInfoProcInfo,(cep),(data))
- #define NewHostInfoProc(routine)\
- (HostInfoUPP)NewRoutineDescriptor((ProcPtr)(routine),uppHostInfoProcInfo,GetCurrentISA())
- #define CallReturnRecProc(routine,cep,data)\
- CallUniversalProc((UniversalProcPtr)routine,uppReturnRecProcInfo,(cep),(data))
- #define NewReturnRecProc(routine)\
- (ReturnRecUPP)NewRoutineDescriptor((ProcPtr)(routine),uppReturnRecProcInfo,GetCurrentISA())
- #else
- typedef EnumProcPtr EnumUPP;
- typedef HostInfoProcPtr HostInfoUPP;
- typedef ReturnRecProcPtr ReturnRecUPP;
-
- #define CallEnumProc(routine,cep,data)\
- (*(routine))((cep),(data))
- #define NewEnumProc(routine)\
- (EnumUPP)(routine)
- #define CallHostInfoProc(routine,cep,data)\
- (*(routine))((cep),(data))
- #define NewHostInfoProc(routine)\
- (HostInfoUPP)(routine)
- #define CallReturnRecProc(routine,cep,data)\
- (*(routine))((cep),(data))
- #define NewReturnRecProc(routine)\
- (ReturnRecUPP)(routine)
- #endif
-
- // this macro will expand correctly for either case
- #define DisposeEnumProc(routine)\
- DisposeRoutineDescriptor((UniversalProcPtr)routine)
- #define DisposeHostInfoProc(routine)\
- DisposeRoutineDescriptor((UniversalProcPtr)routine)
- #define DisposeReturnRecProc(routine)\
- DisposeRoutineDescriptor((UniversalProcPtr)routine)
-
- #if defined(powerc) || defined (__powerc)
- #pragma options align=mac68k
- #endif
- struct HostInfo {
- long rtnCode;
- char cname[255];
- ip_addr addr[NUM_ALT_ADDRS];
- };
- #if defined(powerc) || defined(__powerc)
- #pragma options align=reset
- #endif
-
- #if defined(powerc) || defined (__powerc)
- #pragma options align=mac68k
- #endif
- struct HInfoRec {
- char cpuType[30];
- char osType[30];
- };
- #if defined(powerc) || defined(__powerc)
- #pragma options align=reset
- #endif
-
- #if defined(powerc) || defined (__powerc)
- #pragma options align=mac68k
- #endif
- struct MXRec {
- unsigned short preference;
- char exchange[255];
- };
- #if defined(powerc) || defined(__powerc)
- #pragma options align=reset
- #endif
-
- #if defined(powerc) || defined (__powerc)
- #pragma options align=mac68k
- #endif
- struct ReturnRec {
- long rtnCode;
- char cname[255];
- union {
- ip_addr addr[NUM_ALT_ADDRS];
- HInfoRec hinfo;
- MXRec mx;
- } rdata;
- };
- #if defined(powerc) || defined(__powerc)
- #pragma options align=reset
- #endif
-
- #if defined(powerc) || defined (__powerc)
- #pragma options align=mac68k
- #endif
- struct CacheEntryRecord {
- char* cname;
- unsigned short type;
- unsigned short cclass;
- unsigned long ttl;
- union {
- char* name;
- ip_addr addr;
- } rdata;
- };
- #if defined(powerc) || defined(__powerc)
- #pragma options align=reset
- #endif
-
- typedef OSErr (*OpenResolverProcPtr) (long selector,char* filename);
- typedef OSErr (*CloseResolverProcPtr) (long selector);
- typedef OSErr (*StrToAddrProcPtr)(long selector, char* hostName,HostInfoPtr rtnStruct,HostInfoUPP resultProc, char* userData);
- typedef OSErr (*AddrToStrProcPtr)(long selector,ip_addr address, char* hostName);
- typedef OSErr (*EnumCacheProcPtr)(long selector, EnumUPP result, char* userData);
- typedef OSErr (*AddrToNameProcPtr)(long selector,ip_addr addr,HostInfoPtr rtnStruct,HostInfoUPP resultProc, char* userData);
- typedef OSErr (*HInfoProcPtr)(long selector, char* hostName,ReturnPtr returnRecPtr,ReturnRecUPP resultProc, char* userData);
- typedef OSErr (*MXInfoProcPtr)(long selector, char* hostName,ReturnPtr returnRecPtr,ReturnRecUPP resultProc, char* userData);
-
- enum {
- uppOpenResolverProcInfo=kCStackBased
- | RESULT_SIZE(SIZE_CODE(sizeof(long)))
- | STACK_ROUTINE_PARAMETER(1,SIZE_CODE(sizeof(short))) // short?
- | STACK_ROUTINE_PARAMETER(2,SIZE_CODE(sizeof(char *))),
- uppCloseResolverProcInfo=kCStackBased
- | RESULT_SIZE(SIZE_CODE(sizeof(long)))
- | STACK_ROUTINE_PARAMETER(1,SIZE_CODE(sizeof(short))),
- uppStrToAddrProcInfo = kCStackBased
- | RESULT_SIZE(SIZE_CODE(sizeof(long)))
- | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(short)))
- | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(char *)))
- | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(HostInfoPtr)))
- | STACK_ROUTINE_PARAMETER(4, SIZE_CODE(sizeof(HostInfoUPP)))
- | STACK_ROUTINE_PARAMETER(5, SIZE_CODE(sizeof(char *))),
- uppAddrToStrProcInfo = kCStackBased
- | RESULT_SIZE(SIZE_CODE(sizeof(long)))
- | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(short)))
- | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(long)))
- | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(char *))),
- uppEnumCacheProcInfo = kCStackBased
- | RESULT_SIZE(SIZE_CODE(sizeof(long)))
- | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(short)))
- | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(EnumUPP)))
- | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(char *))),
- uppAddrToNameProcInfo = kCStackBased
- | RESULT_SIZE(SIZE_CODE(sizeof(long)))
- | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(short)))
- | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(ip_addr)))
- | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(HostInfoPtr)))
- | STACK_ROUTINE_PARAMETER(4, SIZE_CODE(sizeof(HostInfoUPP)))
- | STACK_ROUTINE_PARAMETER(5, SIZE_CODE(sizeof(char *))),
- uppHInfoProcInfo = kCStackBased
- | RESULT_SIZE(SIZE_CODE(sizeof(long)))
- | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(short)))
- | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(char *)))
- | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(ReturnPtr)))
- | STACK_ROUTINE_PARAMETER(4, SIZE_CODE(sizeof(ReturnRecUPP)))
- | STACK_ROUTINE_PARAMETER(5, SIZE_CODE(sizeof(char *))),
- uppMXInfoProcInfo = kCStackBased
- | RESULT_SIZE(SIZE_CODE(sizeof(long)))
- | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(short)))
- | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(char *)))
- | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(ReturnPtr)))
- | STACK_ROUTINE_PARAMETER(4, SIZE_CODE(sizeof(ReturnRecUPP)))
- | STACK_ROUTINE_PARAMETER(5, SIZE_CODE(sizeof(char *)))
- };
-
- #if USESROUTINEDESCRIPTORS
- typedef UniversalProcPtr OpenResolverUPP;
- typedef UniversalProcPtr CloseResolverUPP;
- typedef UniversalProcPtr StrToAddrUPP;
- typedef UniversalProcPtr AddrToStrUPP;
- typedef UniversalProcPtr EnumCacheUPP;
- typedef UniversalProcPtr AddrToNameUPP;
- typedef UniversalProcPtr HInfoUPP;
- typedef UniversalProcPtr MXInfoUPP;
-
- #define CallOpenResolverProc(routine,selector,filename)\
- CallUniversalProc((UniversalProcPtr)(routine),uppOpenResolverProcInfo,(selector),(filename))
- #define NewOpenResolverProc(routine)\
- (OpenResolverUPP)NewRoutineDescriptor((ProcPtr)(routine),uppOpenResolverProcInfo,GetCurrentISA())
-
- #define CallCloseResolverProc(routine,selector)\
- CallUniversalProc((UniversalProcPtr)(routine),uppCloseResolverProcInfo,(selector))
- #define NewCloseResolverProc(routine)\
- (CloseResolverUPP)NewRoutineDescriptor((ProcPtr)(routine),uppCloseResolverProcInfo,GetCurrentISA())
-
- #define NewStrToAddrProc(userRoutine)\
- (StrToAddrUPP) NewRoutineDescriptor(userRoutine, uppStrToAddrProcInfo, GetCurrentISA())
- #define CallStrToAddrProc(userRoutine, selector, hostName, rtnStruct, resultProc, userData)\
- CallUniversalProc(userRoutine, uppStrToAddrProcInfo, selector, hostName, rtnStruct, resultProc, userData)
-
- #define NewAddrToStrProc(userRoutine)\
- (AddrToStrUPP) NewRoutineDescriptor(userRoutine, uppAddrToStrProcInfo, GetCurrentISA())
- #define CallAddrToStrProc(userRoutine, selector, address, hostName)\
- CallUniversalProc(userRoutine, uppAddrToStrProcInfo, selector, address, hostName)
-
- #define NewEnumCacheProc(userRoutine) \
- (EnumCacheUPP) NewRoutineDescriptor(userRoutine, uppEnumCacheProcInfo, GetCurrentISA())
- #define CallEnumCacheProc(userRoutine, selector, result, userData) \
- CallUniversalProc(userRoutine, uppEnumCacheProcInfo, selector, result, userData)
-
- #define NewAddrToNameProc(userRoutine) \
- (AddrToNameUPP) NewRoutineDescriptor(userRoutine, uppAddrToNameProcInfo, GetCurrentISA())
- #define CallAddrToNameProc(userRoutine, selector, addr, rtnStruct, resultProc, userData) \
- CallUniversalProc(userRoutine, uppAddrToNameProcInfo, selector, addr, rtnStruct, resultProc, userData)
-
- #define NewHInfoProc(userRoutine) \
- (HInfoUPP) NewRoutineDescriptor(userRoutine, uppHInfoProcInfo, GetCurrentISA())
- #define CallHInfoProc(userRoutine, selector, hostName, returnRecPtr, resultProc, userData) \
- CallUniversalProc(userRoutine, uppHInfoProcInfo, selector, hostName, returnRecPtr, resultProc, userData)
-
- #define NewMXInfoProc(userRoutine) \
- (MXInfoUPP) NewRoutineDescriptor(userRoutine, uppMXInfoProcInfo, GetCurrentISA())
- #define CallMXInfoProc(userRoutine, selector, hostName, returnRecPtr, resultProc, userData) \
- CallUniversalProc(userRoutine, selector, hostName, returnRecPtr, resultProc, userData)
- #else
- typedef OpenResolverProcPtr OpenResolverUPP;
- typedef CloseResolverProcPtr CloseResolverUPP;
- typedef StrToAddrProcPtr StrToAddrUPP;
- typedef AddrToStrProcPtr AddrToStrUPP;
- typedef EnumCacheProcPtr EnumCacheUPP;
- typedef AddrToNameProcPtr AddrToNameUPP;
- typedef HInfoProcPtr HInfoUPP;
- typedef MXInfoProcPtr MXInfoUPP;
-
- #define CallOpenResolverProc(routine,selector,filename)\
- (*routine)((selector),(filename))
- #define NewOpenResolverProc(routine)\
- (OpenResolverUPP)(routine)
-
- #define CallCloseResolverProc(routine,selector)\
- (*routine)(selector)
- #define NewCloseResolverProc(routine)\
- (CloseResolverUPP)(routine)
-
- #define NewStrToAddrProc(userRoutine)\
- (StrToAddrUPP)(userRoutine)
- #define CallStrToAddrProc(userRoutine, selector, hostName, rtnStruct, resultProc, userData)\
- (*userRoutine)(selector, hostName, rtnStruct, resultProc, userData)
-
- #define NewAddrToStrProc(userRoutine)\
- (AddrToStrUPP)(userRoutine)
- #define CallAddrToStrProc(userRoutine, selector, address, hostName)\
- (*userRoutine)(selector, address, hostName)
-
- #define NewEnumCacheProc(userRoutine) \
- (EnumCacheUPP)(userRoutine)
- #define CallEnumCacheProc(userRoutine, selector, result, userData) \
- (*userRoutine)(selector, result, userData)
-
- #define NewAddrToNameProc(userRoutine) \
- (AddrToNameUPP)(userRoutine)
- #define CallAddrToNameProc(userRoutine, selector, addr, rtnStruct, resultProc, userData) \
- (*userRoutine)(selector, addr, rtnStruct, resultProc, userData)
-
- #define NewHInfoProc(userRoutine) \
- (HInfoUPP)(userRoutine)
- #define CallHInfoProc(userRoutine, selector, hostName, returnRecPtr, resultProc, userData) \
- (*userRoutine)(selector, hostName, returnRecPtr, resultProc, userData)
-
- #define NewMXInfoProc(userRoutine) \
- (MXInfoUPP)(userRoutine)
- #define CallMXInfoProc(userRoutine, selector, hostName, returnRecPtr, resultProc, userData) \
- (*userRoutine)(selector, hostName, returnRecPtr, resultProc, userData)
- #endif
-
- // macros will expand correctly for either case
- #define DisposeOpenResolverProc(routine)\
- DisposeRoutineDescriptor((UniversalProcPtr)(routine))
- #define DisposeCloseResolverProc(routine)\
- DisposeRoutineDescriptor((UniversalProcPtr)(routine))
- #define DisposeStrToAddrProc(routine)\
- DisposeRoutineDescriptor((UniversalProcPtr)(routine))
- #define DisposeAddrToStrProc(routine)\
- DisposeRoutineDescriptor((UniversalProcPtr)(routine))
- #define DisposeEnumCacheProc(routine)\
- DisposeRoutineDescriptor((UniversalProcPtr)(routine))
- #define DisposeAddrToNameProc(routine)\
- DisposeRoutineDescriptor((UniversalProcPtr)(routine))
- #define DisposeHInfoProc(routine)\
- DisposeRoutineDescriptor((UniversalProcPtr)(routine))
- #define DisposeMXInfoProc(routine)\
- DisposeRoutineDescriptor((UniversalProcPtr)(routine))
-
- #ifdef __cplusplus
- extern "C" {
- #endif
-
- extern OSErr OpenResolver(StringPtr fileName);
- extern OSErr CloseResolver(void);
-
- extern OSErr StrToAddr(char* hostName,HostInfoPtr host,HostInfoUPP hiproc,char* userDataPtr);
- extern OSErr AddrToStr(ip_addr addr,char* addrStr);
- extern OSErr EnumCache(EnumUPP eproc,char* userDataPtr);
- extern OSErr AddrToName(ip_addr addr,HostInfoPtr host,HostInfoUPP hiproc,char* userDataPtr);
- extern OSErr HInfo(char* hostName,ReturnPtr ret,ReturnRecUPP rproc,char* userDataPtr);
- extern OSErr MXInfo(char* hostName,ReturnPtr ret,ReturnRecUPP rproc,char* userDataPtr);
-
- #ifdef __cplusplus
- }
- #endif
-
- #endif